In a current storage system, there are different types of background operations, such as snapshots deletion, disk defragmentation, etc. When executing these background operations, e.g. deleting lots of snapshots, there is a big spike in input/output (I/O) response time and central processing unit (CPU) utilization. In general, it is a great challenge regarding how to make background operations not take up more system resources and dynamically adjust the system resources usages for background operations according to the available system resources and how to make background operations run faster and more smoothly.
Throttling background operations is easy on its own, but it is different to keep the I/O response time at a proper margin and not to impose unreasonable delays. In current implementation of the storage system, lots of efforts have been made with respect to the throttling of background operations, but there are still lots of spikes and jumps in the I/O response time and CPU utilization. Since there are too many throttling parameters and factors, existing methods cannot adapt to variable workload and complex application environment. A big spike in response time is totally unacceptable to response time sensitive applications (like bank transactions, etc.).